#!/usr/bin/env python
# -*- coding:utf-8 -*-
# Author:taotieren


"""
    rpi.gpio 需要 root 权限，板上运行需要使用
    sudo python switch_on_of.py
    通过按键切换开关状态
"""

""" 非树莓派环境下可以用 rpi.gpio_def 代替 rpi.gpio 来进行程序调试和验证 """
import RPi.GPIO as GPIO
import time


GPIO.setmode(GPIO.BCM)


switch_pin = 18
led_pin = 23


GPIO.setup(switch_pin, GPIO.IN, pull_up_down=GPIO.PUD_UP)
GPIO.setup(led_pin, GPIO.OUT)

""" 
    led_state = True 打开
    led_state = False 关闭
    按键按下后 led_state 取反  led_state = not led_state
    old_input_state 用来记录按键的状态 只有输入状态从 True（按键打开）变成 False（按键关闭）时才会认为按键被按下
    使用按键会存在抖动问题，记得消抖，参考按键中断中的按键消抖方式。
    消抖方式有硬件和软件两种，
    软件消抖：一般采用延时来消抖，根据需求调节延时。
    硬件消抖：一般采用 RC 滤波，在按键信号脚上接 103（10K）上拉电阻并一个 104（0.1uF） 电容
"""
led_state = False
old_input_state = True  # pulled-up


while True:
    new_input_state = GPIO.input(switch_pin)
    if new_input_state == False and old_input_state == True:
        led_state = not led_state
        time.sleep(0.1) #  按键消抖 延时 0.1s，已经很长了，在单片机中一般 10~20ms。
    old_input_state = new_input_state
    GPIO.output(led_pin, led_state)













